package Interfaces;

import Datatypes.DataCategoria;
import Datatypes.DataEstadistica;
import Datatypes.DataPerfil;
import Datatypes.DataReclamo;
import Datatypes.DataRegistro;
import Persistencia.Estadistica;
import java.util.List;

public interface IPerfil{
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Operacion del Caso de Uso 1.<br>
     * Verifica que se puede ingresar los nuevos datos.<br>
     * Retorna true si los datos son validos o false en caso contrario.
     *
     * @return Boolean
     */
    public Boolean comprobarUsuario(String nick, String email) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Operacion del Caso de Uso 1.<br>
     * Da de alta los nuevos datos en el sistema.<br>
     * 
     */
    public void darAltaPerfil(DataPerfil dp) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Operacion del Caso de Uso 2.<br>
     * Obtiene los datos de un perfil con el nick dado.<br>
     * Si hay un error lanza una excepción.<br>
     * Si hay un error lanza una excepción.<br>
     * El parametro cargarImagen indica desde si se quiere cargar el binario de la imagen.
     * 
     * @return DataPerfil
     * @throws Exception
     */
    public DataPerfil obtenerPerfil(String nick, Boolean cargarImagen) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Obtiene los datos de un perfil con el email dado.<br>
     * Si hay un error lanza una excepción.<br>
     * El parametro cargarImagen indica desde si se quiere cargar el binario de la imagen.
     * 
     * @return DataPerfil
     * @throws Exception
     */
    public DataPerfil obtenerPerfilXEmail(String email, Boolean cargarImagen) throws Exception;
    
    /**
     * 
     * @throws Exception 
     */
    public void modificarPerfil(String oldnick, String oldemail, DataPerfil dp) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Esta funcion chequea que el mail y la contraseña sean correctos retornando<br>
     * true si son validos o false en caso contrario.
     * 
     * @param email
     * @param password
     * @return Boolean
     * @throws Exception 
     */
    public Boolean comprobarPassword(String email, String password) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Retorna la lista de nicks del sistema.
     * 
     * @return List(String)
     * @throws Exception 
     */
    public List<String> getNicks() throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Retorna la lista de emails del sistema.
     * 
     * @return List(String)
     * @throws Exception 
     */
    public List<String> getEmails() throws Exception;
    
    //Funciones de Nacho de reclamos y estadiscticas...
    public DataCategoria getCategoria(Integer id) throws Exception;
    
    public void altaCategoriaReclamo(DataCategoria dc) throws Exception;    
    
    public void altaReclamo(DataReclamo dr) throws Exception;
    
    public List<DataReclamo> verReclamos(Integer cod) throws Exception;
    
    public List<DataCategoria> listarCategoriasReclamos()throws Exception;
    
    public DataEstadistica obtenerEstadisticaPIE(String nickD) throws Exception;
    
    public DataEstadistica obtenerEstadisticaLINE(String nickD) throws Exception;
    
    public void inicializarDatosLineChart(Estadistica e) throws Exception;
    
    ////////////////////////////////////////////////////////////////////////////
    
    public List<String> listarPerfiles()throws Exception;
    
    public DataPerfil seleccionarPerfil(String nick, String email)throws Exception;
    
    public List<String> listarClientes()throws Exception;
       
    public List<String> listarJuegosComprados(String nick_cliente) throws Exception;
    
    public Boolean clienteComproJuego(String nick_cliente, Integer codigo_juego) throws Exception;
      
    //Manejo de la base
    public void cargarDatosDePrueba(Boolean force) throws Exception;
    public void limpiarBD() throws Exception;
    public Boolean esVaciaBD() throws Exception;
    public List<DataRegistro> listarRegistros() throws Exception;
    
}
